package com.doudou.time.redislua.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.scripting.support.ResourceScriptSource;

import java.util.HashMap;
import java.util.List;

/**
 * @author yonghao.tang
 * @version 1.0.0
 * @ClassName LuaConfiguration.java
 * @Description 使用lua脚本文件构建lua脚本
 * @createTime 2022年11月07日 12:13:00
 */
@Configuration
public class LuaConfiguration {
    /**
     * 注册lua脚本执行器
     *
     * @return
     */
    @Bean
    public DefaultRedisScript<Boolean> redisScript() {
        DefaultRedisScript<Boolean> redisScript = new DefaultRedisScript<>();
        redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("script/lua/test.lua")));
        redisScript.setResultType(Boolean.class);
        return redisScript;
    }

    /**
     * 注册lua脚本执行器
     *
     * @return
     */
    @Bean
    public DefaultRedisScript<List> redisScriptBatch() {
        DefaultRedisScript<List> redisScript = new DefaultRedisScript<>();
        redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("script/lua/test-batch.lua")));
        redisScript.setResultType(List.class);
        return redisScript;
    }

    /**
     * 注册lua脚本执行器
     *
     * @return
     */
    @Bean
    public DefaultRedisScript<HashMap> redisScriptBatch2() {
        DefaultRedisScript<HashMap> redisScript = new DefaultRedisScript<>();
        redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("script/lua/test-batch2.lua")));
        redisScript.setResultType(HashMap.class);
        return redisScript;
    }
}